package com.cn.lp.export.server.base.context;


import com.cn.lp.export.server.base.result.ResultCode;
import com.cn.lp.export.server.base.result.ResultCodeType;
import com.cn.lp.export.server.base.utils.StringAide;

/**
 * 系统响应码
 *
 * @author 乐聚-http://weibo.com/p/1005051924942345
 */
public enum CoreResponseCode implements ResultCode {

    /**
     * 无处理
     */
    EMPTY(0, "无处理", ResultCodeType.GENERAL),

    /**
     * 服务端接受请求异常
     */
    RECEIVE_ERROR(200, "服务端接受请求异常", ResultCodeType.WARN),

    /**
     * 服务端执行业务异常
     */
    EXECUTE_EXCEPTION(201, "服务端执行业务异常", ResultCodeType.GENERAL),
    /**
     * 服务端接受请求解码格式错误
     */
    DECODE_ERROR(202, "服务端接受请求解码格式错误", ResultCodeType.WARN),
    /**
     * 服务端返回响应编码响应异常
     */
    ENCODE_ERROR(203, "服务端返回响应编码响应异常", ResultCodeType.WARN),

    /**
     * 请求模块不存在
     */
    @Deprecated
    NO_SUCH_MODULE(204, "请求模块不存在", ResultCodeType.WARN),
    /**
     * 请求操作不存在
     */
    NO_SUCH_PROTOCOL(205, "请求操作不存在", ResultCodeType.WARN),
    /**
     * 分发消息异常
     */
    DISPATCH_EXCEPTION(206, "分发消息异常", ResultCodeType.WARN),
    /**
     * 非法请求参数
     */
    ILLEGAL_PARAMETERS(207, "非法请求参数", ResultCodeType.WARN),

    /**
     * 无法接收该类型消息
     */
    NO_RECEIVE_MODE(208, "无法接收该类型消息", ResultCodeType.WARN),

    /**
     * 无法发送该类型消息
     */
    NO_SEND_MODE(209, "无法发送该类型消息", ResultCodeType.WARN),

    /**
     * 验证失败
     */
    VALIDATOR_FAIL(210, "验证失败", ResultCodeType.ERROR),

    /**
     * 用户未登录
     */
    UNLOGIN(211, "用户未登录", ResultCodeType.WARN),

    /**
     * 没有权限调用
     */
    NO_PERMISSIONS(212, "用户没有权限调用", ResultCodeType.WARN),

    /**
     * 请求消息被篡改
     */
    FALSIFY(213, "请求消息被篡改", ResultCodeType.WARN),

    /**
     * 请求过期
     */
    REQUEST_TIMEOUT(214, "请求过期", ResultCodeType.WARN),

    /**
     * 响应过期
     */
    RESPONSE_TIMEOUT(215, "响应过期", ResultCodeType.WARN),

    /**
     * 会话丢失
     */
    SESSION_LOSS(216, "会话丢失", ResultCodeType.ERROR),

    /**
     * 会话超时
     */
    SESSION_TIMEOUT(217, "会话超时", ResultCodeType.ERROR),

    /**
     * 请求序号错误
     */
    MESSAGE_HANDLE(218, "请求序号错误", ResultCodeType.WARN),

    /**
     * 证书无效
     */
    INVALID_CERTIFICATE(219, "验证无效", ResultCodeType.ERROR),

    /**
     * 验证失败
     */
    SERVER_OFFLINE(220, "服务器未上线", ResultCodeType.ERROR),

    /**
     * 客户端IO异常
     */
    IO_EXCEPTION(300, "客户端IO异常", ResultCodeType.WARN),

    /**
     * 客户端请求中断
     */
    INTERRUPTED(301, "客户端请求中断", ResultCodeType.WARN),

    /**
     * 客户端请求超时
     */
    WAIT_TIMEOUT(302, "客户端请求超时", ResultCodeType.WARN),

    /**
     * 远程调用异常
     */
    REMOTE_EXCEPTION(303, "远程调用异常", ResultCodeType.WARN),

    /**
     * 客户端连接中断
     */
    CONNECT_INTERRUPTED(304, "客户端请求中断", ResultCodeType.WARN),

    /**
     * 客户端请求服务端无响应
     */
    REMOTE_NO_RESPONSE(305, "服务端无响应", ResultCodeType.WARN),

    /**
     * 客户端请求失败
     */
    REQUEST_FAILED(306, "客户端请求失败", ResultCodeType.WARN),

    /**
     * 获取分布式锁失败
     */
    GAIN_DISTRIBUTE_LOCK_FAIL(401, "获取分布式锁失败", ResultCodeType.WARN),

    /**
     * 未知异常
     */
    UNKNOWN_ERROR(501, "服务端异常", ResultCodeType.ERROR),

    /**
     * 参数异常
     */
    BAD_PARAM(502, "参数异常", ResultCodeType.WARN),

    /**
     * 上传文件过大
     */
    UPLOAD_FILE_MORE_LARGE(503, "上传文件过大", ResultCodeType.WARN),

    ;

    private int code;

    private String message;

    private ResultCodeType type;

    private CoreResponseCode(int code, String message, ResultCodeType type) {
        this.code = code;
        this.message = message;
        this.type = type;
    }

    @Override
    public ResultCodeType getType() {
        return type;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getRawMessage() {
        return message;
    }

    @Override
    public String getMessage(Object... params) {
        if (params.length > 0) {
            return StringAide.format(message, params);
        }
        return message;
    }

    public static void main(String[] args) {
        for(CoreResponseCode coreResponseCode : CoreResponseCode.values()) {
            System.out.println("code :" + coreResponseCode.getCode() + "-" + coreResponseCode.getRawMessage());
        }
    }
}
